package demo02;
/*题目：海滩上有一堆桃子，五只猴子来分。第一只猴子把这堆桃子凭据分为五份，多
了一个，这只猴子把多的一个扔入海中，拿走了一份。第二只猴子把剩下的桃子又平
均分成五份，又多了一个，它同样把多的一个扔入海中，拿走了一份，第三、第四、第
五只猴子都是这样做的，问海滩上原来最少有多少个桃子？*/
public class topic41 {
    public static void main(String[] args) {
        // 关于index，可以从1开始，但是我们知道桃子数一定是要大于5的，所以从6开始
        int index = 6;

        while (true) {
            // 对于每一个index都调用finds()方法来判断其是否符合条件
            boolean finds = finds(index);
            if (finds) {
                System.out.println("海滩上最少有" + index + "个桃子。"); //最少3121只桃子
                break;
            }
            // 6除以5余1，那么步进就得是5，因为1~4得到的余数分别为2，3，4，0，当然，步进为1也是ok，就是效率低了些。
            index += 5;
        }
    }

    public static boolean finds(int num) {
        boolean flag = false;
        for (int i = 1; i <= 5; i++) {
            // 判断num是否大于5，要是还没到第五只猴子呢就不足五个桃子了，那第五只猴子要生气了，并且判断该数是否除5余1
            if (num > 5 && num % 5 == 1) {
                // 判断是不是最后一只猴子，如果到最后一直猴子了，且符合条件，就返回true，表明找到了该数。
                if (i == 5) {
                    flag = true;
                } else {
                    // 如果不是最后一只猴子，那么该猴子丢掉一个，且拿走五分之一，剩下原来桃子数-1的4/5
                    num = ((num-1)*4) / 5;
                }
            } else {
                // 如果该数小于5导致没法分了，或者不符合最后能丢掉一个的条件，直接返回false
                return false;
            }
        }
        return flag;
    }
}
